#============================================
# Ajax
# 异步提交
# 局部刷新
# 例子:github注册
# 动态获取用户名实时的跟后端确认并实时展示的前端(局部刷新)
# 朝发送请求的方式
# 1.浏览器地址栏直接输入ur1回车   GET请求
# 2. a标签href属性              GET请求
# 3. form表单                   GET请求/POST请求
# 4.ajax                        GET请求/POST请求

# AJAX不是新的编程语言，而是一种使用现有标准的新方法(比较装饰器)
# AJAX最大的优点是在不重新加载整个页面的情况下，可以与服务器交换数据并更新部分网页内
# 容。(这一特点给用户的感受 是在不知不觉中完成请求和响应过程)
# Ajax我们只学习jQuery封装之后的版本(不学原生的原生的复杂并且在实际项目中也一般不用)
# 所以我们]在前端贝面使用aj ax的时候需要确保导入了jQuery
# ps :并不只有jQuery能够实现ajax,其他的框架 也可以但是换汤不换药原理是一样的 SZ
#============================================
# 小列子
# 页面上有三个input框
# 在前两个框中输入数字点击按钮朝后端发送ajax请求
# 后端计算出结果再返回给前端动态展示的到第三个input框中
# (整个过程页面不准有刷新,也不能在前端计算)

# <script>
#     //先给按钮绑定一个点击事件
#     $('#btn').click(function() {
#         //朝后端发送ajax请求
#         $. ajax({
#             // 1. 指定朝哪个后端发送ajax请求
#             url:'', //不写就是朝当前地址提交
#             // 2.请求方式
#             type: 'post', // 不指定默认就是get都是小写
#             // 3.数据
#             {#data:{'username ' : 'jason', ' password' :123},#}
#             data:{'i1':$('#d1').vaL(),'i2':$('#d2').val()},
#               //   5.s扩s展参数
#               代码发布项目还会涉及             dataType: ' JSON' 用于httpresponse返回的json格式 
#               // 4.回调函数:当后端给你返回结果的时候会自动触发args接受后端的返回结果
#             success:function(args) {    后端返回的参数直接调用给args中 
#                 {#aLert(args) // 通过DOM操作动态渲染到第三个input里面#}
#                 $('#d3'.val(args))
#                 }
#             })
#         })
# </script>
#============================================
# ajax编码格式
# 前后端传输数据的编码格式
# urlencoded
# formdata
# json
# #研究form表单
# 默认的数据编码格式是urlencoded
# django后端针对符合urlencoded编码格式的数据会自动帮你解析封装到request.POST中
# 如果你把编码格式改成formdata，那么针对普通的键值对还是解析到request . POST中而将文
# 件解析到request . FILES中
# form表单是没有办法发送json格式数据的
#研究ajax
# 默认的编码格式也是ur lencoded
# 数据格式:username= jason&age=20
# dj ango后端针对符合ur lencoded编码格式的数据都会自动帮你解析封装到request . POST中
# username=jason&age=20 >>> request . POST
#============================================
# ajax发送数据
# request.is_ajax  判断请求是否是ajax请求,返回布尔值
# <script>
# $(' #d1' ).click( function () {
# $.ajax({
# url :
# type:' post' ，
# data:JSON. stringify({'username': 'jason', 'age' :25}),
# contentType: ' application/json', // 指定编码格式
# success: function () {

# }
# })
# })
# </ script>

# json_ bytes = request. body
# json_ str = json_ _bytes . decode( 'utf-8')
# json_ _dict = json. loads(json_ str)
# # json. loads括号内如果传入了-个二进制格式的数据那么内部自动解码再反序列化
# json_ dict = json. loads(json_ bytes
# )

# ajax发送json格式数据需要注意点
# 1. contentType参数指定成:application/json
# 2.数据是真正的json格式数据
# 3. django后端不会帮你处理json格式数据需要你自己去request.body获取并处理
#============================================
# ajax发送文件需要借助于js内置对象FormData
# <script>
# //点击按钮朝后端发送普通键值对和文件数据
# $(' #d4') .on('click'，function () {
    # // 1需要先利用FormData内置对象
    # let formDate0bj = new FormData( );
    # // 2添加普通的键值对
    # formDate0bj . append( 'username',$( '#d1' ).val());
    # formDate0bj . append( 'password' ,$( '#d2' ).val());
    # // 3添加文件对象
    # formDate0bj . append( ' myfile',$( ' #d3')[0] . files[0])
    # // 4将对象基于ajax发送给后端
    # $.ajax({
        # type: 'post',
        # data: formDate0bj, // 直接将对象放在data后面即可
        # // ajax发送文件必须要指定的两个参数
        # contentType:false, // 不需使用任何编码django后端 能够自动识别
        # formdata对象
        # processData: false,
        # //告诉你的浏览器不要对你的数据进行任何处理
        # success: function (args) {
    #       })
# })
# </script>

# def ab_ file( request) :
# if request.is_ ajax() :
# if request. method == ' POST' :
# pr int (request. POST )
# pr int (request.FILES)
# return render (request, 'ab_ file.html' ) 

# 总结:
# 1.需要利用内置对象FormData
# // 2添加普通的键值对
# formDate0bj . append( 'username' ,$('#d1' ).val());
# formDate0bj . append( 'password' ,$( ' #d2' ).val());
# // 3添加文件对象
# formDate0bj . append( 'myfile' ,$('#d3')[0] .files[0])
# 2.需要指定两个关键性的参数
# contentType:false，// 不需使用任何编码django后端 能够自动识别
# formdata对象
# processData:false, // 告诉你的浏览器不要对你的数据进行任何处理
# 3. django后端能够直接识别到formdata对象并且能够将内部的普通键值自动解析并封装到
# request.POST中文件数据自动解析并封装到request.FILES中
#============================================
# 自带序列化组件
# suser_ queryset = modle.use.object.all()
# res = serializers . serialize( 'json',suser_ queryset)
# 会自动帮你将数据变成json格式的字符串 并且内部非常的全面 '
# return HttpResponse (res)
# 前后端分离的项目
# 作为后端开发的你只需要写代码将数据处理好
# 能够序列化返回给前端即可
# 再写一个接口文档告诉前端每个字段代表的意思即可
#============================================
# ajax与sweetalert结合
# def delete(request):
#     if request.is_ajax():
#         if request.method == 'POST':
#             data = {'code':100,'msg':'删除完毕'}
#             id = request.POST.get('id_del')
#             res = models.user.objects.filter(pk=id).delete()
#             return HttpResponse(json.dumps(data))

# <body>
#     <div class="container">
#         <div class="row">
#             <div class="col-md-8 col-md-offset-2">
#                 <h1 class="text-center">管理系统</h1>
#                 <table class="table table-hover">
#                     <thead>
#                         <tr>
#                             <th>id</th>
#                             <th>name</th>
#                             <th>password</th>
#                             <th>active</th>
#                         </tr>
#                     </thead>
#                     <tbody>
#                         {% for i in obj %}
#                             <tr>
#                                 <th>{{ i.pk }}</th>
#                                 <th>{{ i.name }}</th>
#                                 <th>{{ i.password }}</th>
#                                 <th>
#                                     <button class="btn btn-info btn-xs" >编辑</button>
#                                     <button class="btn btn-danger btn-xs del" id_del="{{ i.pk }}">删除</button>
#                                 </th>
#                             </tr>
#                         {% endfor %}
#                     </tbody>
#                 </table>
#             </div>
#         </div>
#     </div>

#     <script>
#         $('.del').on('click',
#         function () {
#             let obj = $(this)

#             swal({
#                   title: "确定要删除",
#                   text: "请小心操作",
#                   type: "warning",
#                   showCancelButton: true,
#                   confirmButtonClass: "btn-danger",
#                   confirmButtonText: "是的，删除!",
#                   cancelButtonText: "不，在想想",
#                   closeOnConfirm: false,
#                   closeOnCancel: false
#                 },
#                 function(isConfirm) {
#                   if (isConfirm) {
#                     $.ajax({
#                         url:'/delete/',
#                         type: 'post',
#                         data:{'id_del':obj.attr('id_del')},
#                         success:function (args) {
#                             if (JSON.parse(args).code === 100){
#                                 swal("删除成功", JSON.parse(args).msg, "success");
#                                 obj.parent().parent().remove()
#                             }
#                             else{
#                                 swal("删除失败", "未知错误", "success");
#                             }
#                         }
#                     })

#                   } else {
#                     swal("取消删除", "删除失败 :)", "error");
#                   }
#                 });
#         })
#     </script>
# </body>
#============================================
# 批量插入数据
# book. _list = []
# for i in range(100000):
#baok_.obj = models . Book(titLe= '第%s本书'%i)
#book_list. append(book_ obj )
# modeLs . Book . objectst.buLk_ create (book. list)
# 当你想要批量插入数据的时候使用orm给你提供的buLk_create能够大大的减少操作时间
#============================================
  